// #include <PWM.h>
// #include <math.h>

// /** @brief 控制蜂鸣器开关 */
// #define Beeper_on 0

// /** @brief PWM20周期 */
// #define Trd 16000

// // xdata —> 可寻址片外ram (64k 地址范围FFFFH)
// // 使用_at_关键字对存储器进行绝对地址定位程序如下
// // char xdata LED_Data[50] _at_ 0x8000;
// uint16_t xdata PDT0[8] _at_ 0x2040; // PWM0占空比调节寄存器
// uint16_t xdata PDT20 _at_ 0x2034;   // PWM20占空比调节寄存器

// // 关闭与led冲突的另一个led对应的P30
// // 例:P3 |= P30ff[led2]关闭与led2冲突的灯led7对应的P3口P36
// uint8_t P3off[4] = {0x40, 0x80, 0x10, 0x20};
// // uint8_t P3off[4] = {0x10, 0x20, 0x40, 0x80};

// // 打开能够led对应的P3口
// // 例:P3 &= P3on[led2]表示打开灯led2对应的P3口P34
// uint8_t P3on[4] = {0xef, 0xdf, 0xbf, 0x7f};

// // 亮度控制缓存，亮度控制从0x0000到0x00ff
// // uint8_t led_luminance[4] = {0, 0, 0, 0};
// uint8_t led_luminance[4] = {0xff,0xff,0xff,0xff};

// // PDT0端口选择
// // 例:PDT0[PDT0op[led2]]表示选中led2对应的PDT口
// // 对PDT0赋值亮度缓存以调节亮度
// // 例:PDT0[PDT0op[led2]]=led_luminance[led2]可以改变led2的亮度
// uint8_t PDT0op[4] = {1, 5, 6, 4};

// /**
//  * @brief PWM默认初始化: 目前仅支持PWM0
//  * 
//  */
// void PWM_init(uint8_t PWM_Port, uint8_t PWM_Pin)
// {
    
// }

// // PWM0的初始化，包括启动PWM0，调节PWM0周期(频率)，此处未设置中断。
// // 此处设置为:打开PWM0口,选择最低频率输出方波,选择PWM工作于独立模式,边缘对齐,周期为0x00ff*4MHz,
// void PWM0_Init()
// {
//     // PWMCON0^7为PWM0开关模块，置1则让PWM0口接通PWM开关，置0则让PWM0口设置为GPIO状态，此处置1打开
//     // PWMCON0^6为中断请求标志位，当一个周期结束时会置为1产生中断。产生中断后需要手动置0
//     // PWMCON0^5和PWMCON0^4为频率选择，00，01，10，11频率由高到低，此处选择:_最低频率4MHz_
//     // PWMCON0^3和PWMCON0^2为保留位，此处不使用
//     // PWMCON0^1和PWMCON0^0为工作模式选择，此处选择独立模式、边缘对齐，故可置为00
//     // 综上设置PWMCON0为1x11xx00
//     PWMCON0 &= 0xfc; // xxxxxx00	x->1
//     PWMCON0 |= 0xb0; // 1x11xxxx	x->0
//     // PWMCON1^x被置为1时，PWMx所在的I/O口被作为波形输出口
//     // 此处使用//PWM00 PWM01 PWM03 PWM04 PWM05 PWM06
//     PWMCON1 = 0x7b; // 0111 1011
//     // PWMCFG为PWMx波形反向设置，不需反向全部置0
//     PWMCFG = 0x00;
//     // PWMPD为PWM共用周期设置，根据PWMCON0设置的周期计数，此处选择:_较小周期_
//     PWMPDH = 0x00;
//     PWMPDL = 0xff;
//     // 打开中断
//     // 设置IE^7为1接通总中断开关
//     IE |= 0x80; // 1xxxxxxx
//     // 设置IE1为xxxxxx1x接通PWM中断开关
//     IE1 |= 0x02; // xxxxxx1x
// }

// /**
//  * @brief 点亮对应的LED灯
//  * @param lednum LED灯: 0~3
//  * @param light 亮度: 高亮 highlight  低亮 lowlight  不亮 offlight
//  */
// void PWM0_Lunimanceop(uint8_t lednum, luminance light)
// {
//     led_luminance[lednum] = light;
// }

// /**
//  * @brief 控制所有灯的亮度
//  * @param light 亮度: 高亮 highlight  低亮 lowlight  不亮 offlight
//  */
// void PWM0_LightAll(luminance light)
// {
//     uint8_t i;
//     for (i = 0; i < 12; i++)
//     {
//         PWM0_Lunimanceop(i, light);
//     }
// }

// // PWM2初始化，初始化目的为为控制PWM20使蜂鸣器发声
// void PWM2_Init()
// {
//     // 配置PWM2
//     //  PWM波指针指向PWM2进行操作
//     // 指针指向PWM2，TXINX需要置为 xxxx x010
//     //  xxxx x0x0
//     TXINX &= 0xFA; // xxxx xxxx & 1111 1010 = xxxx x0x0
//     // xxxx xx1x
//     TXINX |= 0x02; // xxxx x0x0 | 0000 0010 = xxxx x010
//     // 为了给蜂鸣器周期脉冲使其响起，需要打开定时
//     // 具体操作为TXCON置xxxx x1xx
//     TXCON |= 0x04;
//     // 配置时钟周期
//     PWM20_setPeriod(5);
// }

// void PWM20_on()
// {
//     if (Beeper_on)
//     {
//         // 配置PWM2
//         //  PWM波指针指向PWM2进行操作
//         // 指针指向PWM2，TXINX需要置为 xxxx x010
//         //  xxxx x0x0
//         TXINX &= 0xFA; // xxxx xxxx & 1111 1010 = xxxx x0x0
//         // xxxx xx1x
//         TXINX |= 0x02; // xxxx x0x0 | 0000 0010 = xxxx x010
//         // 具体操作为TXMOD置xxx1 xxxx
//         TXMOD |= 0x10;
//     }
// }

// void PWM20_off()
// {
//     // 具体操作为TXMOD置xxx0 xxxx
//     TXMOD &= 0xEF;
// }

// void PWM20_setPeriod(double index)
// {
//     uint16_t prd = (Trd * pow(2, -index / 12));
//     PDT20 = prd / 2;
//     RCAPXH = prd >> 8;
//     RCAPXL = prd & 0xFF;
// }

// void PWM20_Beep(uint8_t times)
// {
//     uint8_t i;
//     uint32_t j;
//     for (i = 0; i < times; i++)
//     {
//         PWM20_on();
//         for (j = 0; j < 0x8FFF; j++)
//             ;
//         PWM20_off();
//         for (j = 0; j < 0x8FFF; j++)
//             ;
//     }
// }

// // PWM0中断程序 实现灯的自动点亮
// void PWM0Inturrupt() interrupt 8
// {
//     // lednum = (lednum + 1) % 4;                   // 自动循环选灯
//     P3 &= 0x7F;
//     PDT0[4] = highlight; // 在开灯之前定义灯的亮度

//     // PWMCON0^6为中断请求标志位，当一个周期结束时会置为1产生中断。产生中断后需要手动置0，此处手动置0
//     PWMCON0 &= 0xbf; // x0xx xxxx
// }
